package amtf

import "slices"

func A存在元素(范围 []string, 关键词 string) (res bool) {
	if slices.Contains(范围, 关键词) {
		return true
	}
	return
}

func A字符串切片去重(strSlice []string) []string {
	// 创建一个 map 用于记录已经出现过的元素
	keys := make(map[string]bool)
	result := []string{}
	for _, entry := range strSlice {
		// 检查元素是否已经在 map 中
		if _, value := keys[entry]; !value {
			keys[entry] = true
			result = append(result, entry)
		}
	}
	return result
}

func A取字段值s(models []map[string]any) (ids []uint) {
	for _, model := range models {
		反射el := A取反射el(model)
		id := A取id(反射el)
		ids = append(ids, id)
	}
	return
}

func A取ids(models []any) (ids []uint) {
	for _, model := range models {
		反射el := A取反射el(model)
		id := A取id(反射el)
		ids = append(ids, id)
	}
	return
}

func A字段组去重(fields []*S字段) []*S字段 {
	// 用于记录已经出现过的 A名称
	nameMap := make(map[string]bool)
	result := []*S字段{}

	for _, field := range fields {
		if field == nil {
			continue
		}
		// 检查 A名称 是否已经出现过
		if _, exists := nameMap[field.A名称]; !exists {
			nameMap[field.A名称] = true
			result = append(result, field)
		}
	}
	return result
}

// %：取模运算符，返回除法运算的余数。例如，5 % 3 的结果是 2。
// 当 当前序号 是数组的最后一个索引时，当前序号 + 1 会超出数组范围，但通过取模运算，会将其转换为数组的第一个索引（即 0），从而实现循环的效果。
func A下一个序号(当前序号 int, 范围 []string) int {
	res := (当前序号 + 1) % len(范围)
	return res
}
func A上一个序号(当前序号 int, 范围 []string) int {
	res := (当前序号 - 1) % len(范围)
	return res
}

func A取序号(关键词 string, 范围 []string) int {
	for i, v := range 范围 {
		if v == 关键词 {
			return i
		}
	}
	return -1 // 如果未找到，返回 -1
}
